package com.dz.scrm.utils;

import android.text.TextUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by hai.huang on 2019/12/30.
 * 信息校验工具类
 */

public class CheckUtils {

    /**
     * @param string 要校验的字符串
     * @param flag   校验类型： 0 表示验证手机号格式正确性； 1表示验证是否为移动号码； 2表示验证密码格式正确性；
     *               3表示校验验证码格式正确性；4表示旧密码格式验证
     * @return boolean isRight 校验结果
     * @author DW
     * @Description 该方法是校验格式的，目前包括的校验功能为： 1、手机号码格式验证（11位数字）； 2、手机号是否为移动号码验证；
     * 3、新、旧密码格式验证（6-18位数字、字母、标点符号）； 4、验证码格式（6位数字）正确性；
     */
    public static boolean checkFormatting(String string, int flag) {
        boolean isRight = false;
        String patternStr = null;
        switch (flag) {
            case 0:
                patternStr = "^1\\d{10}$";//"^1[3|4|5|7|8][0-9]\\d{8}$" 11位手机号码格式的正则表达式
                break;

            case 1:
                /*
                 * 目前中国移动号段正则表达式，包括: 134[0-8] +7位 13[5|6|7|8|9] +8位 147+8位 (3G上网卡)
                 * 15[0|1|2|7|8|9] +8位 1705 +7位 (移动虚拟运营商) 178 +8位 (4G号段)
                 * 18[2|3|4|7|8] +8位
                 */
                patternStr = "^1((3[5-9]|(47)|(5([0-2]|[7-9]))|(78)|(8([2-4]|[7-8])))\\d{8})"
                        + "|(((34[0-8])|(705))\\d{7})$";
                break;

            case 2:
                /*
                 * 新密码格式必须是6-18位 可以包含数字、字母，可以是单纯的数字或字母
                 */
                patternStr = "^[A-Z0-9a-z]{6,18}$";
                break;

            case 3:
                /*
                 * 旧密码格式必须是6-18位 可以包含数字、字母、下划线，可以是单纯的数字或字母
                 */
                patternStr = "^.{6,18}$";
                break;

            case 4:
                patternStr = "^\\d{6}$";// 验证码格式，6位数字
                break;

            case 5:
                patternStr = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$";// 邮箱
                break;

            case 6:
                patternStr = "^[A-Z0-9a-z_.]+$";// 用户名格式
                break;

            case 7:
                patternStr = "^\\w+$";// 学校和班级格式
                break;
        }

        Pattern pattern = Pattern.compile(patternStr);
        Matcher matcher = pattern.matcher(string);
        if (matcher.find()) {
            isRight = true;
        }
        return isRight;
    }

    /**
     * 验证昵称
     */
    public static boolean isRegNickname(String mobiles) {
        // 匹配非表情符号的正则表达式
        final String reg = "^[\u4E00-\u9FA5A-Za-z0-9]+$";
        Pattern pattern = Pattern.compile(reg);
        Matcher matcher = pattern.matcher(mobiles);
        return matcher.matches();
    }

    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }


    public static boolean isLetterString(String str) {
        Pattern pattern = Pattern.compile("[a-zA-Z]*");
        Matcher isLetter = pattern.matcher(str);
        return isLetter.matches();
    }

    /*
     * 手机号判断，返回结果：0：11位数字，1：不是11位数字，2：格式不正确
     * */
    public static int pcheckPhoneLength(String string) {
        if (!TextUtils.isEmpty(string)) {
            boolean isNumber = isNumeric(string);
            if (isNumber) {//都是数字
                if (checkFormatting(string, 0)) {
                    return 0;
                } else {
                    return 1;
                }
            }
        }
        return 2;
    }

    public static int checkRightPhone(String string){
        int  isRight = 0;
        if (!TextUtils.isEmpty(string)) {
            if (!string.startsWith("1")){
                isRight = 1;
            }else if (string.startsWith("1") && string.length() == 11){
                isRight = 2;
            }
        }else {
            isRight = 3;
        }
        return isRight;
    }

    /**
     * 判断该字符串是否为中文
     *
     * @param string
     * @return
     */

    public static boolean isChinese(String string) {
        int n = 0;
        for (int i = 0; i < string.length(); i++) {
            n = (int) string.charAt(i);
            if (!(19968 <= n && n < 40869)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 判断中文名称是否合格
     *
     * @param cnName
     * @return
     */

    public static boolean isStandardCnNick(String cnName) {
        boolean isCnNick = false;
        if (!TextUtils.isEmpty(cnName)) {
            int length = cnName.length();
            if (length >= 2 && length <= 5 && isChinese(cnName)) {
                isCnNick = true;
            }
        }
        return isCnNick;
    }
}
